var express = require('express');
var router = express.Router();
var sql = require('./../sql');
var User = require('./../sql/col/users');
var { validateToken } = require('./../utils')
var md5 = require('md5'); // 密码加密
var uuid = require('node-uuid'); // 生成用户id
var jwt = require('jsonwebtoken'); // token模块
router.get('/', function(req, res, next) {
  res.send('用户相关接口');
});

/**
 * @api {post} api/users/register 注册功能
 * @apiDescription 注册功能
 * @apiGroup users
 * @apiParam { string } tel 手机号
 * @apiParam { string } password 密码
 * @apiSuccessExample { json } Success-Response:
 * {
 *  code: '10400',
 *  message: '请完善表单信息'
 * }
 * {
 *  code: '10666',
 *  message: '注册成功'
 * }
* {
 *  code: '10606',
 *  message: '该用户已注册'
 * }
 * @apiSampleRequest /api/users/register
 * @apiVersion 1.0.0
 */
router.post('/register', (req, res, next) => {
  // 1.获取用户提交的 手机号 和 密码 --- （去除首位空格）
  let { tel, password } = req.body
  tel = tel.trim()
  password = password.trim()
  // 2.判断手机号个密码是否为空
  if (!tel || !password) { // 如果用户没有输入手机号和密码提示并且不再继续往下执行
    res.send({
      code: '10400',
      message: '请完善表单信息'
    })
    return
  }
  // 3.依据手机号查询数据库，有没有该用户
  sql.find(User, { tel }, { _id: 0 }).then(data => {
    if (data.length === 0) { // 3.1 没有查到，可以完成注册
      // 4.注册
      password = md5(password)
      const obj = {
        userid: 'user_' + uuid.v1(),
        tel,
        password,
        nickname: '请设置昵称',
        sex: -1, // 还未设置性别
        avatar: '',
        email: '',
        member: 0
      }
      sql.insert(User, obj).then(() => {
        res.send({
          code: '10666',
          message: '注册成功'
        })
      })
    } else { // 3.2 查询到该用户，提示已注册，请登录
      res.send({
        code: '10606',
        message: '该用户已注册'
      })
    }
  })
})
/**
 * @api {post} api/users/login 登陆功能
 * @apiDescription 登陆功能
 * @apiGroup users
 * @apiParam { string } tel 手机号
 * @apiParam { string } password 密码
 * @apiSuccessExample { json } Success-Response:
 * {
 *  code: '10400',
 *  message: '请完善表单信息'
 * }
 * {
 *  code: '10888',
 *  message: '登陆成功'
 * }
* {
 *  code: '10808',
 *  message: '该用户未注册'
 * }
 * @apiSampleRequest /api/users/login
 * @apiVersion 1.0.0
 */
router.post('/login', (req, res, next) => {
  // 1.获取信息，去除空格
  let { tel, password } = req.body
  tel = tel.trim()
  password = password.trim()
  // 2.判断信息是否填写完整
  if (!tel || !password) {
    res.send({
      code: '10400',
      message: '请完善表单信息'
    })
    return
  }
  // 3.依据手机号码查询数据库，看该用户是不是未注册
  sql.find(User, { tel }, { _id: 0 }).then(data => {
    if (data.length > 0) { // 3.1有该用户 --- 执行登陆操作
      // 4.登陆 根据手机号和密码一起查询数据库，如果查到表示可以登录，查不到密码错误 --- 密码先加密再查询
      password = md5(password);
      sql.find(User, { tel, password }, { _id:0 }).then(result => {
        // 依据长度判断
        if (result.length === 0) {
          res.send({
            code: '10505',
            message: '密码错误'
          })
        } else {
          // 验证成功后，服务端会签发一个 Token，把这个 Token 发送给客户端。
          // 生成token
          let token = jwt.sign({ tel, password }, 'daxun', {
            expiresIn: 10 * 24 * 60 * 60 // 10天有效期
          })
          res.send({
            code: '10888',
            message: '登陆成功',
            data: {
              userid: data[0].userid,
              nickname: data[0].nickname,
              token
            }
          })
        }
      })

    } else { // 查无此用户，表示还没有注册
      res.send({
        code: '10808',
        message: '该用户未注册'
      })
    }
  })
})

module.exports = router;